package com.ruoyi.platform.system.user.dao;

import com.ruoyi.platform.system.user.pojo.UserDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 用户信息表
 *
 * @author lcf
 * @since 2020-11-27 11:28:36
 */
@Mapper
@Repository
public interface UserDAO {
    /**
     * 插入数据 全部插入
     *
     * @param record {@link UserDO}
     * @return 影响行数
     **/
    int insertUser(UserDO record);

    /**
     * 插入数据 部分插入
     *
     * @param record {@link UserDO}
     * @return 影响行数
     **/
    int insertUserSelective(UserDO record);

    /**
     * 插入数据 批量插入
     *
     * @param recordList {@link List<UserDO>}
     * @return 影响行数
     **/
    int insertUserBatch(@Param("list") List<UserDO> recordList);

    /**
     * 批量部分插入
     *
     * @param recordList {@link List<UserDO>}
     * @return 影响行数
     **/
    int insertUserSelectiveBatch(@Param("list") List<UserDO> recordList);

    /**
     * 更新数据 全部更新
     *
     * @param record {@link UserDO}
     * @return 影响行数
     **/
    int updateUserByPrimaryKey(UserDO record);

    /**
     * 更新数据 部分更新
     *
     * @param record {@link UserDO}
     * @return 影响行数
     **/
    int updateUserByPrimaryKeySelective(UserDO record);

    /**
     * 通过主键删除该数据
     *
     * @param userId 主键Number
     * @return 影响行数
     **/
    int delUserByPrimaryKey(@Param("userId") Long userId);

    /**
     * 通过主键查询数据
     *
     * @param userId 主键Number
     * @return {@link UserDO}
     **/
    UserDO selectUserByPrimaryKey(@Param("userId") Long userId);

    /**
     * 通过主键列表查询数据
     *
     * @param userIdList {@link List<Long>} 主键Number列表
     * @return {@link List<UserDO>}
     **/
    List<UserDO> selectUserByPrimaryKeyList(@Param("list") List<Long> userIdList);

    /**
     * 通过DO中不为空的数据组合成联合条件 查询
     *
     * @param query {@link UserDO}
     * @return {@link List<UserDO>}
     **/
    List<UserDO> selectByUser(UserDO query);

    /**
     * 通过DO中不为空的数据组合成联合条件 查询数量
     *
     * @param query {@link UserDO}
     * @return 统计行数
     **/
    int selectUserCount(UserDO query);
    /**
     * 根据账号获取
     */
    UserDO getByAccount(String account);
    /**
     * 根据手机号码获取
     */
    UserDO getByPhone(String phone);
    /**
     * 后台查看用户列表
     */
    List<UserDO> selectPlatList(String nickName);
}